<?php

//分析设计
/*
当后台发送一个通知，希望前台全部用户或者部分用户或者某个具体的用户能够收到
表设计，两张表
1，用来保存通知的标题和内容notices;
   id,title,content
2 ,用来保存那个用户收到了通知,用户和notice关系表
   user_id,  notice_id
同步或者异步：用户量大的时候异步体验比较好
队列：文件，redies,database都可以做队列，业务逻辑都一样
*/

//模型关联User.php，多对多的关系，一个用户收到多条通知，一个通知通知多个用户
 //1.用户收到的通知
  public function notices(){
      return $this->belongsToMany(Notic::class,'user_notice','user_id','notice_id')->withPivot(['user_id','notice_id']);
  }

  //2.给用户增加通知
  public function addNotice($notice){
      return $user->notices()->save($notices);
  }
//然后就是CRUD，控制器和视图，前台的通知显示
 $user = Auth::user();
 $notice = $user->notices; 
 return 视图

//创建队列任务，用于通知任务分发
 1.修改队列的配置文件quenu.php,修改驱动为database
 2.创建队列的表,php artisna queue:table
 3.php artisan migrate
 4.php artisan make:job sendNotices
 class SendMessage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    private $notice;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(\App\Notice $notice)
    {
        $this->notice = $notice;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $users = \App\User::all();
        foreach ($users as $user) {
            $user->addNotice($this->notice);
        }
    }


    //在创建的时候分发
    $notice = \App\Notice::create(request(['title', 'content']));

        dispatch(new \App\Jobs\SendMessage($notice));


        6.启动队列
        nohup php artisan queue.work >> /dev/null & 


 

